# -*- ecoding: utf-8 -*-
# @Author: Wick
# @Time: 2024-02-24 4:03

# 分别统计列表 [True,False,0,1,2] 中 True,False,0,1,2的元素个数，发现了什么？

list1 = [True, False, 0, 1, 2]

for i in range(len(list1)):
    if list1[i] == True:
        print(list1[i])
    if list1[i] == False:
        print(list1[i])
    if list1[i] == 0:
        print(list1[i])
    if list1[i] == 1:
        print(list1[i])
    if list1[i] == 2:
        print(list1[i])

# 从列表 [True,1,0,‘x’,None,‘x’,False,2,True] 中删除元素‘x’
list1 = [True, 1, 0, 'x', None, 'x', False, 2, True]
i = 0
counter = 0
while i < len(list1):
    if list1[i] == 'x':
        list1.pop(i)
        counter += 1
        i -= 1
    i += 1

print(list1)

# 11、从列表 [True,1,0,‘x’,None,‘x’,False,2,True] 中删除索引号为4的元素
list1 = [True, 1, 0, 'x', None, 'x', False, 2, True]
list1.pop(4)
print(list1)

# 12、删除列表中索引号为奇数（或偶数）的元素
list1 = [True, 1, 0, 'x', None, 'x', False, 2, True]
add_list = []
for i in range(len(list1)):
    if i % 2 == 0:
        add_list.append(list1[i])
print(add_list)

# 13、清空列表中的所有元素。
list1 = [1, 2, 3, 4, 2, 3]
list1.clear()
print(list1)

# 14、对列表 [3,0,8,5,7] 分别做升序和降序排列。
list1 = [3, 0, 8, 5, 7]
list1.sort()
print(list1)
list1.sort(reverse=True)
print(list1)

# 15、将列表 [3,0,8,5,7] 中大于 5 元素置为1，其余元素置为0。
list1 = [3, 0, 8, 5, 7]
for i in range(len(list1)):
    if list1[i] > 5:
        list1[i] = 1
    else:
        list1[i] = 0
print(list1)

# 16、遍历列表 [‘x’,‘y’,‘z’]，打印每一个元素及其对应的索引号。
list1 = ['x', 'y', 'z']
for i in range(len(list1)):
    print(list1[i], i)

# 17、将列表 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 拆分为奇数组和偶数组两个列表。
list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
odd_list = []
even_list = []
for i in range(len(list1)):
    if list1[i] % 2 == 0:
        even_list.append(list1[i])
    else:
        odd_list.append(list1[i])
print(odd_list, even_list)

# 18、分别根据每一行的首元素和尾元素大小对二维列表 [[6, 5], [3, 7], [2, 8]] 排序。相当于按6,3,2进行排序，除非第一个元素相等，按第二个元素排序。
a = [[3, 7], [6, 5], [2, 8]]
a = sorted(a, key=lambda i: i[0])
a = sorted(a, key=lambda i: i[-1])
print(a)

# 19、从列表 [1,4,7,2,5,8] 索引为3的位置开始，依次插入列表 [‘x’,‘y’,‘z’] 的所有元素。
list1 = [1, 4, 7, 2, 5, 8]
list2 = ['x', 'y', 'z']
for i in range(len(list2)):
    list1.insert(3 + i, list2[i])
print(list1)

# 20、快速生成由 [5,50) 区间内的整数组成的列表
list1 = [i for i in range(5, 50)]
print(list1)

# 22、将列表 [‘x’,‘y’,‘z’] 和 [1,2,3] 转成 [(‘x’,1),(‘y’,2),(‘z’,3)] 的形式。
list1 = ['x', 'y', 'z']
list2 = [1, 2, 3]
list3 = list(zip(list1, list2))
print(list3)

# 23、以列表形式返回字典 {‘Alice’: 20, ‘Beth’: 18, ‘Cecil’: 21} 中所有的键。
dicct1 = {'Alice': 20, 'Beth': 18, 'Cecil': 21}
list1 = []
for i in dicct1:
    list1.append(i)
print(list1)
# 24、以列表形式返回字典 {‘Alice’: 20, ‘Beth’: 18, ‘Cecil’: 21} 中所有的值。
dict1 = {'Alice': 20, 'Beth': 18, 'Cecil': 21}
list1 = []
for i in dict1:
    list1.append(dict1[i])
print(list1)

# 25、以列表形式返回字典 {‘Alice’: 20, ‘Beth’: 18, ‘Cecil’: 21} 中所有键值对组成的元组。
dict1 = {'Alice': 20, 'Beth': 18, 'Cecil': 21}
list1 = []
tuple1 = ()
for i in dict1:
    tuple1 = (i, dict1[i])
    list1.append(tuple1)
print(list1)

# 26、向字典 {‘Alice’: 20, ‘Beth’: 18, ‘Cecil’: 21} 中追加 ‘David’:19 键值对，更新Cecil的值为17。
dict1 = {'Alice': 20, 'Beth': 18, 'Cecil': 21}
dict1["David"] = 19
dict1['Cecil'] = 17
print(dict1)

# 27、删除字典 {‘Alice’: 20, ‘Beth’: 18, ‘Cecil’: 21} 中的Beth键后，清空该字典。
dict1 = {'Alice': 20, 'Beth': 18, 'Cecil': 21}
del dict1["Beth"]
print(dict1)
dict1.clear()
print(dict1)

# 28、判断 David 和 Alice 是否在字典 {‘Alice’: 20, ‘Beth’: 18, ‘Cecil’: 21} 中。
dict1 = {'Alice': 20, 'Beth': 18, 'Cecil': 21}
print('David' in dict1)
print('Alice' in dict1)

# 29、遍历字典 {‘Alice’: 20, ‘Beth’: 18, ‘Cecil’: 21}，打印键值对。
dict1 = {'Alice': 20, 'Beth': 18, 'Cecil': 21}
for i in dict1:
    print(i, dict1[i])

# 31、以列表 [‘A’,‘B’,‘C’,‘D’,‘E’,‘F’,‘G’,‘H’] 中的每一个元素为键，默认值都是0，创建一个字典。
list1 = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
dict1 = {}
for i in list1:
    dict1[i] = 0
print(dict1)

# 32、将二维结构 [[‘a’,1],[‘b’,2]] 和 ((‘x’,3),(‘y’,4)) 转成字典。
list1 = [['a',1],['b',2]]
tuple1 = (('x',3),('y',4))
dict1 = dict(list1)
dict2 = dict(tuple1)
print(dict1, dict2)

# 33、将元组 (1,2) 和 (3,4) 合并成一个元组。
tuple1 = (1,2)
tuple2 = (3,4)
tuple3 = tuple1+tuple2
print(tuple3)

# 34、将空间坐标元组 (1,2,3) 的三个元素解包对应到变量 x,y,z。

# 35、返回元组 (‘Alice’,‘Beth’,‘Cecil’) 中 ‘Cecil’ 元素的索引号。
tuple1 = ('Alice','Beth','Cecil')
for i in range(len(tuple1)):
    if tuple1[i] == "Cecil":
        print(i)

# 36、返回元组 (2,5,3,2,4) 中元素 2 的个数。
tuple1 = (2,5,3,2,4)
print(tuple1.count(2))

# 37、判断 ‘Cecil’ 是否在元组 (‘Alice’,‘Beth’,‘Cecil’) 中。
tuple1 = ('Alice','Beth','Cecil')
print('Cecil' in tuple1)

# 38、返回在元组 (2,5,3,7) 索引号为2的位置插入元素 9 之后的新元组。
tuple1 = (2,5,3,7)
list1 = list(tuple1)
list1[2] = 9
tuple1 = tuple(list1)
print(tuple1)

# 39、创建一个空集合，增加 {‘x’,‘y’,‘z’} 三个元素。
set1 = set()
list1 = ['x', 'y', 'z']
for i in list1:
    set1.add(i)
print(set1)

# 40、删除集合 {‘x’,‘y’,‘z’} 中的 ‘z’ 元素，增j加元素 ‘w’，然后清空整个集合。
set1 = {'x', 'y', 'z'}
set1.remove('z')
print(set1)
set1.add('w')
print(set1)
set1.clear()
print(set1)

# 41、返回集合 {‘A’,‘D’,‘B’} 中未出现在集合 {‘D’,‘E’,‘C’} 中的元素（差集）
set1 = {'A', "D", 'B'}
set2 = {'D', 'E', 'C'}
set3 = set1 - set2
print(set3)